<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Perfil_Model extends CI_Model {

	public function __construct()
	{
		parent::__construct();
		
		include_once 'app/enum/EnumTipoPerfil.php';
	}
	
	public function inserir($data){
	
		$retorno = $this->db->insert('tb_perfil', $data);
		
		if(!$retorno){
			throw new Exception('Ocorreu um erro ao inserir o Perfil. Favor tentar novamente mais tarde.');
		}else{
			if($this->db->affected_rows() > 0){
				return $this->db->insert_id();
			}
		}
	}
	
	public function alterar($data, $id){
	
		$this->db->where('idPerfil', $id);
		$retorno = $this->db->update('tb_perfil', $data);
		
		if(!$retorno){
			throw new Exception('Ocorreu um erro ao alterar o Perfil. Favor tentar novamente mais tarde.');
		}else{
			return true;
		}
	}
	
	public function excluir($id){
	
		$this->db->where('idPerfil', $id);
		$retorno = $this->db->delete('tb_perfil');
	
		if(!$retorno){
			throw new Exception('Ocorreu um erro ao excluir o Perfil. Favor tentar novamente mais tarde.');
		}else{
			return true;
		}
	}
	
	function obter($id){
	
		$sql = "select *
				from tb_perfil
				where idPerfil = ".$id;
	
		$query = $this->db->query($sql);
	
		if($query->num_rows() > 0){
			$obj = $query->result();
			
			return $obj[0];
		}else{
			return null;
		}
	}
	
	function pesquisar($descricao, $tipoPerfil, $situacao, $tipoPerfilLogin = null){
	
		$sql = "SELECT pe.idPerfil,
			    pe.descricao,
		        pe.tipoPerfil,
			    COUNT(usu.idPerfil) as qnt
				FROM tb_perfil as pe
					left join tb_usuario as usu on (usu.idPerfil = pe.idPerfil )
				WHERE 1 = 1 ";
	
		if (!empty($descricao)){
			$sql .= "and pe.descricao like '%".$descricao."%' ";
		}
		
		if (!empty($tipoPerfilLogin)){
			if ((int)$tipoPerfilLogin === (int)EnumTipoPerfil::getCodigo(EnumTipoPerfil::ADMINISTRADOR_FULL)){
				if (!empty($tipoPerfil)){
					$sql .= "and pe.tipoPerfil = ".$tipoPerfil." ";
				}
			}else{
				if (!empty($tipoPerfil)){
					$sql .= "and pe.tipoPerfil = ".$tipoPerfil." and pe.tipoPerfil <> ".(int)EnumTipoPerfil::getCodigo(EnumTipoPerfil::ADMINISTRADOR_FULL)." ";
				}else{
					$sql .= "and pe.tipoPerfil <> ".(int)EnumTipoPerfil::getCodigo(EnumTipoPerfil::ADMINISTRADOR_FULL)." ";
				}
			}
		}else{
			if (!empty($tipoPerfil)){
				$sql .= "and pe.tipoPerfil = ".$tipoPerfil." ";
			}
		}
		
		if (!empty($situacao)){
			if ($situacao === "A"){
				$sql .= "and pe.dtVigenciaFim is null ";
			}else{
				$sql .= "and pe.dtVigenciaFim is not null ";
			}
		}
		
		$sql .= "group by usu.idPerfil
				 order by pe.descricao";
		
		$query = $this->db->query($sql);
	
		return $query->result();
	}
	
	function listarUsuariosAtivosPorPerfil($idPerfil){
	
		$sql = "SELECT *
				FROM tb_usuario as usu
					left join tb_pessoa as pes on (pes.idUsuario = usu.idUsuario and pes.dtVigenciaFim is null)
				where usu.dtVigenciaFim is null
					and usu.idPerfil = ". trim($idPerfil) ."
				order by pes.nome";
	
		$query = $this->db->query($sql);
	
		return $query->result();
	}
	
	function listarPerfisAtivos($tipoPerfil = null){
	
		$sql = "SELECT *
				FROM tb_perfil 
				where dtVigenciaFim is null ";
		
		if (!empty($tipoPerfil)){
			if ((int)$tipoPerfil !== (int)EnumTipoPerfil::getCodigo(EnumTipoPerfil::ADMINISTRADOR_FULL)){
				$sql .= "and tipoPerfil <> ".(int)EnumTipoPerfil::getCodigo(EnumTipoPerfil::ADMINISTRADOR_FULL)." ";
			}
		}
		
		$sql .= "order by descricao";
	
		$query = $this->db->query($sql);
	
		return $query->result();
	}
	
	function obterPesquisaPorParamentros($where){
	
		$this->db->select('*');
		$this->db->from('tb_perfil');
		$this->db->where($where);
	
		$query = $this->db->get();
	
		return $query->result();
	
	}
	
	function validarDescricaoJaCadastrada($descricao, $id){
	
		$sql = "SELECT *
				FROM tb_perfil
				WHERE 1 = 1
				and LOWER(TRIM(descricao)) = '".strtolower(trim($descricao))."'";
	
		if (!empty($id)){
			$sql .= "and idPerfil <> ".$id;
		}
	
		$query = $this->db->query($sql);
	
		return $query->result();
	
	}
	
	function validaUsuarioComPerfilInativo($idUsuario){
		$sql = "select distinct per.idPerfil
				from tb_perfil as per
				inner join tb_usuario as usu on (usu.idPerfil = per.idPerfil)
				where usu.idUsuario = ".$idUsuario."
				and per.dtVigenciaFim is null";
		
		$query = $this->db->query($sql);
		
		if($query->num_rows() > 0){
			return false;
		}else{
			return true;
		}
	}
}